/**
 * 树形菜单组件组合
 *
 * 依赖：jQuery-zTree 3.5 以上 
 */
 
/**
 * 弹出树
 * @param: sring	dataURL,不能为空，树形菜单数据来源url。
 * @param: string	reqParam,数据请求参数，可以为空。使用url格式。 
 * @param：JSON		setting,不能为空， zTree树设置，格式遵循zTree的Setting格式。
 * @param：function callback,不能为空，回调函数，如果存在回调函数选中树节点数据以{'tid':'节点ID','tname':'节点名称'}传入回调函数。
 * @param: boolean	onlyLeaf,为空表示false， 是否只选择叶子节点，true只选择叶子节点。在多选树时才有效。
*/
jQuery.fn.popTree = function(dataURL,reqParam,setting,callback,onlyLeaf){
	//只存在一颗popTree
	treediv = $("#popTreeDIV");
	//检查存在
	if(treediv && treediv.length<1){
		treediv = $("<div id='popTreeDIV'><div class='treeTop'><input name='treeQuery' placeholder='节点名称模糊搜索'><i class='fa fa-window-close right' title='关闭'></i><i class='fa fa-check-square' title='确定选中'></i><i class='fa fa-trash right' title='清除选中'></i></div><div class='treeBody'><ul id='popTree' class='ztree'></ul></div></div>");
		
		//绑定关闭动作，摧毁ztree对象，移除popTree根元素。
		treediv.on('click','.fa-window-close',closePopTree);
		
		//绑定清除动作，删除已经选择的数据
		treediv.on('click','.fa-trash',function(){if(callback)callback({"tid":"","tname":""});closePopTree();});
	}else
		$("#popTree").empty();
	
	$(this).after(treediv);
	
	//绑定节点查找
	treediv.on('change','input[name="treeQuery"]',function(){if($(this).val()!=''){treeQuery("popTree",$(this).val())}});
	if(setting && setting.check && setting.check.eable){
		//多选树 绑定确定动作
		treediv.on('click','.fa-check-square',function(){
			nds = $.fn.zTree.getZTreeObj("popTree").getCheckedNodes(true);
			_ret =[];
			for(x=0;x<nds.length;x++){
				if(!nds[x].tid) continue; //忽略无值节点
				if(onlyLeaf && nds[x].isParent) continue; //忽略父节点
				_r = {};
				_r['tid'] = nds[x].tid;
				_r['tname'] = nds[x].name;
				_ret.add(_r);
			}
			
			if(callback && typeof(callback)=='function'){
				callback(_ret);
				//关闭popTree
				closePopTree();
			}
			return _ret;
		});
		
	}else{
		//单选树 移除确定按钮,
		treediv.find(".fa-check-square").remove().end();
		//绑定节点单击选中动作为确定动作
		if(!setting['callback']) setting['callback']={};
		setting.callback['onClick'] = function(event,treeId,treeNode){
			//选中空值节点，忽略。
			if(!(treeNode && treeNode.tid)) return;
			//如果只能选中叶子，而当前节点是父节点，忽略
			if(onlyLeaf && treeNode.isParent) return;
			_ret = {};
			_ret['tid'] = treeNode.tid;
			_ret['tname'] = treeNode.name;
			
			if(callback && typeof(callback)=='function'){
				callback(_ret);
				//关闭popTree
				closePopTree();
			}
			return _ret;
			
		};
		
	}
	getData(dataURL,reqParam,function(res){
		if(res.code==RESP_SUCCESS && res.data){
			$.fn.zTree.init($("#popTree"),setting,res.data);
		}
	}); 
 }

/**
 * 搜索节点名称关键字，只显示命中的节点以及这些节点的父节点。
 */ 
var treeQuery = function(treeid,str){
	_tree = $("#"+treeid);
	_tree.find(".mark_white_blue").toggleClass("mark_white_blue"); //清除上次搜索结果
	_tree.find(".notNode").remove().end;
	
	treeObj = $.fn.zTree.getZTreeObj(treeid);
	treeObj.expandAll(true);
	treeRoots = treeObj.getNodes();
	var node_count = 0;
	//遍历各子树
	for(var x=0;x<treeRoots.length;x++){
		node_count += travelNode(treeRoots[x],str);
	}
	
	if(node_count<1){
		_tree.append("<span class='notNode'>没有符合条件的节点</span>");
	}
}

var travelNode = function(node,str){
	var count = 0;
	if(node.name.indexOf(str)>=0){
		$("#"+node.tId+"_span").addClass("mark_white_blue");
		count = 1;
	}
	if(node.nodes){
		for(var x=0;x<node.nodes.length;x++){
			count += travelNode(node.nodes[x],str);
		}
	}
	if(count>0)
		$("#"+node.tId).show();
	else
		$("#"+node.tId).hide();
	
	return count;
}

/**
 * 关闭弹出树
 */
var closePopTree = function(){
	_tree = $.fn.zTree.getZTreeObj("popTree");
	if(_tree) {
		_tree.destroy();
		$("#popTreeDIV").remove().end();
	}
}
 
/**
 * 多选菜单树设置
 */
var multiMenuTree = {
	
	check:{
		enable:true,
		autoCheckTrigger:true,
		chkboxType:{"Y":"ps","N":"ps"},
		chkStyle:"checkbox",
	},
	data:{
		key:{
			children:"nodes",
			title:"title"
		},
		simpleData:{
			enable:true,
			idKey:"tid",
			pIdKey:"pid",
			rootPId:"0"
		}
	},
	view:{
		showIcon:false,
		nameIsHTML:true
	}
};

/**
 * 单选菜单树设置
 */
var sigleMenuTree = {
	data:{
		key:{
			children:"nodes",
			title:"title"
		},
		simpleData:{
			enable:true,
			idKey:"tid",
			pIdKey:"pid",
			rootPId:"0"
		}
	},
	view:{
		showIcon:false,
		nameIsHTML:true
	}
};
 